/****************************************************************************

				本程序框架支持STC8G、STC8H系列芯片可通用参考.
				下载时, 选择时钟 22.1184MHz (可以在配置文件"config.h"中修改).
				
****************************************************************************/

#include "config.h"
#include "PWM.h"
#include "gpio.h"
#include "bt_timer.h"
#include "bt_rs485.h"
#include "bt_wdt.h"
#include "bt_task.h"

#define REC_PWR_ON 1

void GPIO_config(void)
{
	GPIO_InitTypeDef xdata GPIO_InitStructure; //结构定义

	//uart 2
	GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
	GPIO_InitStructure.Mode = GPIO_PullUp;			  //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	GPIO_Inilize(GPIO_P1, &GPIO_InitStructure);		  //初始化

	//485
	GPIO_InitStructure.Pin = GPIO_Pin_4;		//指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
	GPIO_InitStructure.Mode = GPIO_OUT_PP;		//指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
	GPIO_Inilize(GPIO_P5, &GPIO_InitStructure); //初始化
	
	// IR_CON
	GPIO_InitStructure.Pin = GPIO_Pin_2;
	GPIO_InitStructure.Mode = GPIO_OUT_PP;
	GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); 

	//REC_LED 浮空输入
	GPIO_InitStructure.Pin = GPIO_Pin_6;
	GPIO_InitStructure.Mode = GPIO_HighZ;
	GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); 

	// KEY_IN
	GPIO_InitStructure.Pin = GPIO_Pin_7;
	GPIO_InitStructure.Mode = GPIO_HighZ;
	GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); 

	// RECPWR 推挽输出  LED_G LED_R
	GPIO_InitStructure.Pin = GPIO_Pin_4 | GPIO_Pin_3 | GPIO_Pin_2;
	GPIO_InitStructure.Mode = GPIO_OUT_PP;
	GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); 

}

void PWM_Config(void)
{
	PWMx_InitDefine PWM_InitStruct;

	PWM_InitStruct.PWM2_Mode = 0x68;  // 根据实际需求选择合适模式
	PWM_InitStruct.PWM_Period = 4319;			 // 重装载器
	PWM_InitStruct.PWM2_Duty = 200;				 // 占空比
	PWM_InitStruct.PWM_CC2Enable = ENABLE;		 // 开启输入捕获/比较输出
	PWM_InitStruct.PWM_CC2NEnable = DISABLE;	 // 关闭互补输出
	PWM_InitStruct.PWM_Reload = ENABLE;			 // 开启重装载
	PWM_InitStruct.PWM_Fast = DISABLE;			 // 关闭快速模式
	PWM_InitStruct.PWM2_SetPolity = Polity_0;    // 中断优先级0
	PWM_InitStruct.PWM_EnoSelect = ENO2P;  		 // 根据实际电路和需求确定
	// PWM_InitStruct.PWM_PreLoad = ENABLE;		 // 开启预加载
	PWM_InitStruct.PWM_PS_SW = PWM2_SW_P12_P13;  // 
	PWM_InitStruct.PWM_CEN_Enable = ENABLE;      // 使能计数器
	PWM_InitStruct.PWM_BrakeEnable = DISABLE;
	PWM_InitStruct.PWM_MainOutEnable = ENABLE;

	// 配置PWM2P
    PWM_Configuration(PWMA, &PWM_InitStruct);
}

void REC_PWR_Set(u8 value)
{
	P34 = value;
}

/**
 * @brief  程序入口
 * @note
 * @retval
 */
void main(void)
{
	// GPIO初始化
	GPIO_config();
	// PWM初始化
	PWM_Config();
	// 定时器初始化
    bt_timer_init();
	// 485 初始化
    // bt_rs485_init();
    // 看门狗初始化
    // bt_wdt_init();
	// 开启总中断
	EA = 1;

	REC_PWR_Set(REC_PWR_ON);		//REC_PWR

	// bt_task_init();

	while (1)
	{
		// bt_task_loop();
	}
}

